package com.neu.util;

import javafx.scene.control.Cell;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class ExcelUtil {
    private static String[] cols={"k_id","e_id",
            "g_name","g_info","g_key","g_date","g_now","g_num","g_img"
    };
    public static List<Map<String,String>> readExcel(InputStream in) throws IOException {
        List<Map<String,String>> list=new ArrayList<>();
        //我们要读取excel文件
        XSSFWorkbook work=new XSSFWorkbook(in);
        XSSFSheet sheet = work.getSheetAt(0);
        int rows=sheet.getPhysicalNumberOfRows();
        for (int i=1;i<rows;i++){
            XSSFRow row=sheet.getRow(i);
            Map<String,String> item=new HashMap<>();
            for (int j = 0; j <9 ; j++) {
                String key=cols[j];
                //从下标为1 的列开始获取数据
                XSSFCell cell=row.getCell(j+1);
//                item.put(key,cell.getStringCellValue());
                String value="";
                if (cell!=null){
//                    //必须要考虑每一个单元各个格中的数据类型
//                    if (cell.getCellTypeEnum()==CellType.NUMERIC){
//                        value+=cell.getNumericCellValue();
//                    }else {
//                        value=cell.getStringCellValue();
//                    }
                    value=cell.toString();
                }
                item.put(key,value);
            }
            list.add(item);
        }
        return list;
    }
    /**
     *
     * @param out     :输出流
     * @param list      :要写入excel文件中的数据
     * @param culName    :表中的列名,用户获取数据使用
     * @param labelNames    :生成excel文件时,每一列的标题名称
     */
    public static void writeExcel(OutputStream out,List<Map<String,Object>> list,
                                  String[] culName,String[] labelNames) throws IOException {
        XSSFWorkbook book=new XSSFWorkbook();
        XSSFSheet sheet=book.createSheet();
        //创建第一行
        XSSFRow row=sheet.createRow(0);
        //给第一行中的每一列设置标题
        for (int i = 0; i <labelNames.length ; i++) {
            XSSFCell cell=row.createCell(i);
            cell.setCellValue(labelNames[i]);
        }
        //向excel中添加每一行数据,从下标为1的行开始
        for (int i = 0; i <list.size() ; i++) {
            //循环一次产生一行
            row=sheet.createRow(i+1);
            //获取要写入行中的数据
            Map<String,Object> item=list.get(i);
            for (int j = 0; j <culName.length ; j++) {
                XSSFCell cell=row.createCell(j);
                cell.setCellValue(item.get(culName[j]).toString());
            }
        }
        //把work写入打输出流中
        book.write(out);
    }
}
